package ar.edu.utn.frgp.banco.dao.impl;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import ar.edu.utn.frgp.banco.dao.PlazosFijosDao;
import ar.edu.utn.frgp.banco.dao.connection.ConnectionHandler;
import ar.edu.utn.frgp.banco.dao.connection.IConnectionHandler;
import ar.edu.utn.frgp.banco.domain.PlazoFijo;
import ar.edu.utn.frgp.banco.exceptions.DataAccessException;

public class PlazosFijosDaoImpl implements PlazosFijosDao {

	public void altaPlazosFijos(PlazoFijo pf) throws DataAccessException {
		PreparedStatement ps = null;
		
		IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
			
		try {
			ps = cn.prepareStatement("INSERT INTO plazosfijos VALUES(?,?,?,?,?,?,?,?,?,?,?)");
			
			ps.setInt    (1, pf.getIdplazofijo());
			ps.setInt 	 (2, pf.getDni());
			ps.setDate   (3, new Date(pf.getFechaalta().getTime()));
			ps.setDate   (4, new Date(pf.getFechavencimiento().getTime()));
			ps.setDouble (5, pf.getOrigen());
			ps.setDouble (6, pf.getNrocuentaorigen());
			ps.setDouble (7, pf.getAcreditacion());
			ps.setDouble (8, pf.getNrocuentadestino());
			ps.setDouble (9, pf.getMonto());
			ps.setDouble (10,pf.getInteres());
			ps.setInt 	 (11,pf.getEstado());
			ps.executeUpdate();
		
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} finally {
			handler.closeResources(ps, cn);
		}
	}
	
	public List<PlazoFijo> traerPlazosFijosActivos(int dni,int bandera) throws DataAccessException {
		Statement st = null;
	    ResultSet rs = null;
			
		IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
		List<PlazoFijo> plazosfijos = new ArrayList<PlazoFijo>();
		
		try {
			st = cn.createStatement();
			rs = st.executeQuery("SELECT * FROM plazosfijos WHERE plazosfijos.dni = " + dni + " and  plazosfijos.estado = " + bandera );
			
			PlazoFijo pf = null;
			
			while (rs.next()) {
				
				pf = new PlazoFijo();
				pf.setIdplazofijo 	  (rs.getInt("idplazofijo"));
				pf.setDni		  	  (rs.getInt("dni"));
				pf.setFechaalta   	  (rs.getDate("fechaalta"));
				pf.setFechavencimiento(rs.getDate("fechavencimiento"));
				pf.setOrigen		  (rs.getInt("origen"));
				pf.setNrocuentaorigen (rs.getInt("nrocuentaorigen"));
				pf.setAcreditacion    (rs.getInt("acreditacion"));
				pf.setNrocuentadestino(rs.getInt("nrocuentadestino"));
				pf.setMonto           (rs.getInt("monto"));
				pf.setInteres		  (rs.getInt("interes"));
				pf.setEstado		  (rs.getInt("estado"));
											
				plazosfijos.add(pf);
			}
		} catch (SQLException e) {
			System.out.println("Error al crear tablas.");
			e.printStackTrace();			
		} finally {
			handler.closeResources(st, cn);
		}
		return plazosfijos;
	}
	
	@Override
	public void bajarPlazosFijos(int pf) throws DataAccessException {
		
		Statement st = null;
 
		IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
			try {
				st = cn.createStatement();
				st.executeUpdate("UPDATE plazosfijos SET estado = 0 where plazosfijos.idplazofijo = " + pf  );
				
			} catch (SQLException e) {
				System.out.println("Error al modificar tablas.");
				e.printStackTrace();
			}
			finally {
				handler.closeResources(st, cn);
			 		}	
	}
	
	public PlazoFijo traerPlazosFijosVencidosPorCodigo(int idpf) throws DataAccessException {
		
		 Statement st = null;
	     ResultSet rs = null;
	 	PlazoFijo pf = null;
	     
		 IConnectionHandler handler = new ConnectionHandler();
		 Connection cn = handler.getConnection();
		
		try {
			st = cn.createStatement(); 
			rs = st.executeQuery("SELECT * FROM plazosfijos WHERE plazosfijos.idplazofijo = " + idpf + " and  plazosfijos.estado = 1" );
			
		
			
			while (rs.next()) {
				
				pf = new PlazoFijo();
				pf.setIdplazofijo 	  (rs.getInt("idplazofijo"));
				pf.setDni		  	  (rs.getInt("dni"));
				pf.setFechaalta   	  (rs.getDate("fechaalta"));
				pf.setFechavencimiento(rs.getDate("fechavencimiento"));
				pf.setOrigen		  (rs.getInt("origen"));
				pf.setNrocuentaorigen (rs.getInt("nrocuentaorigen"));
				pf.setAcreditacion    (rs.getInt("acreditacion"));
				pf.setNrocuentadestino(rs.getInt("nrocuentadestino"));
				pf.setMonto           (rs.getInt("monto"));
				pf.setInteres		  (rs.getInt("interes"));
				pf.setEstado		  (rs.getInt("estado"));
							
				
			}
		} catch (SQLException e) {
			System.out.println("Error al crear tablas.");
			e.printStackTrace();			
		} finally {
			handler.closeResources(st, cn);
		}
		return pf;
	}

	@Override
	public List<PlazoFijo> traerPlazosFijosActivos(int dni)throws DataAccessException {
		
		Statement st = null;
	     ResultSet rs = null;
			
		 IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
		java.util.Date utilDate = new java.util.Date();
		
		java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
		
		List<PlazoFijo> plazosfijos = new ArrayList<PlazoFijo>();
		
		try {
			st = cn.createStatement();
			rs = st.executeQuery("SELECT * FROM plazosfijos WHERE plazosfijos.dni = " + dni + " and  plazosfijos.estado = 1 and plazosfijos.fechavencimiento > '" + sqlDate+"'" );
			
			PlazoFijo pf = null;
			
			while (rs.next()) {
				
				pf = new PlazoFijo();
				pf.setIdplazofijo 	  (rs.getInt("idplazofijo"));
				pf.setDni		  	  (rs.getInt("dni"));
				pf.setFechaalta   	  (rs.getDate("fechaalta"));
				pf.setFechavencimiento(rs.getDate("fechavencimiento"));
				pf.setOrigen		  (rs.getInt("origen"));
				pf.setNrocuentaorigen (rs.getInt("nrocuentaorigen"));
				pf.setAcreditacion    (rs.getInt("acreditacion"));
				pf.setNrocuentadestino(rs.getInt("nrocuentadestino"));
				pf.setMonto           (rs.getInt("monto"));
				pf.setInteres		  (rs.getInt("interes"));
				pf.setEstado		  (rs.getInt("estado"));
							
				plazosfijos.add(pf);
			}
		} catch (SQLException e) {
			System.out.println("Error al crear tablas.");
			e.printStackTrace();			
		} finally {
			handler.closeResources(st, cn);
		}
		return plazosfijos;
		
	}

	@Override
	public List<PlazoFijo> traerPlazosFijosVencidos(int dni)throws DataAccessException {
		 Statement st = null;
	     ResultSet rs = null;
			
		 IConnectionHandler handler = new ConnectionHandler();
		Connection cn = handler.getConnection();
		
		java.util.Date utilDate = new java.util.Date();
		
		java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
		
		List<PlazoFijo> plazosfijos = new ArrayList<PlazoFijo>();
		
		try {
			st = cn.createStatement();
			rs = st.executeQuery("SELECT * FROM plazosfijos WHERE plazosfijos.dni = " + dni + " and  plazosfijos.estado = 1 and plazosfijos.fechavencimiento <= '" + sqlDate+"'" );
			
			PlazoFijo pf = null;
			
			while (rs.next()) {
				
				pf = new PlazoFijo();
				pf.setIdplazofijo 	  (rs.getInt("idplazofijo"));
				pf.setDni		  	  (rs.getInt("dni"));
				pf.setFechaalta   	  (rs.getDate("fechaalta"));
				pf.setFechavencimiento(rs.getDate("fechavencimiento"));
				pf.setOrigen		  (rs.getInt("origen"));
				pf.setNrocuentaorigen (rs.getInt("nrocuentaorigen"));
				pf.setAcreditacion    (rs.getInt("acreditacion"));
				pf.setNrocuentadestino(rs.getInt("nrocuentadestino"));
				pf.setMonto           (rs.getInt("monto"));
				pf.setInteres		  (rs.getInt("interes"));
				pf.setEstado		  (rs.getInt("estado"));
							
				plazosfijos.add(pf);
			}
		} catch (SQLException e) {
			System.out.println("Error al crear tablas.");
			e.printStackTrace();			
		} finally {
			handler.closeResources(st, cn);
		}
		return plazosfijos;
	}

	

}
